/*
 *JS функция аналогичная PHP trim
 *@param string s - входная строка
 *@return string - выходная отформотированная строка
 **/
function TrimStr(s) {
  if (typeof s != "undefined"){
    s = s.replace( /^\s+/g, '');
    return s.replace( /\s+$/g, '');
  }
  else{
      return '';
  }
}

function onloadJS(markersArrOff) {
    
    /*
    *автоподгрузчик городов
    **/
    $("#city").autocomplete(W_AJAX + "city/getCity.php", {
        delay:10,
        minChars:1,
        matchSubset:1,
        autoFill:true,
        matchContains:1,
        cacheLength:10,
        selectFirst:true,
        maxItemsToShow:10
    });
    
    arrPodRazdel = {};
    
    /*
    *автоподгрузчик городов
    **/
   
    $("#buildings").autocomplete(W_AJAX + "building/buildings.php", {
        delay:10,
        minChars:1,
        matchSubset:1,
        autoFill:true,
        matchContains:1,
        cacheLength:10,
        selectFirst:true,
        maxItemsToShow:10
    });  
    

        var lat = 59.9;
        var lng = 30.3;
        var zoom = 10;

        var myOptions = {
            center: new google.maps.LatLng(lat, lng),
            zoom: zoom,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        map = new google.maps.Map(document.getElementById("map_canvas1"), myOptions);
        
        clickOnMap = true;
                /*
         *добавляем обработчик событий по клику на карте
         **/
        google.maps.event.addListener(map, 'click', function(event){
            
            if(clickOnMap){
            latLng = event.latLng; //координаты клика по карте
            
            map.setCenter(latLng);
            map.setZoom(15);
            
            /*если маркер еще не был определен, то создаем новый. если был ранее создан, то меняем его местоположение на новогое
             */
            if (typeof marker == 'undefined') {
                marker = new google.maps.Marker({ //добавляем новый маркер с координатами щелчка
                position: latLng, //координаты маркера/щелчка
		map: map //добавляем маркер на уже созданую карту
            });
            }
            else {
                marker.setMap(map);
                marker.setPosition(latLng)
            }
            
          /*
           *запускаем геокодер для определения текстового значения адреса
           **/
            
            geocoder.geocode({'location': latLng}, function(results, status) {
                
                googleAnswer = results;
                //здесь и далее реализован небольшой "костыль" из-за некоторых проблем, возникавших при закрытии/открытии инфо-окошек.
                /*
                *если глобальный объект инфо-окошка сущесвует, то вызываем метод его закрытия(даже если окошко закрыто). если нет, то создаем новый
                **/
                if (typeof infoWindow == 'undefined') {
                    infoWindow = new google.maps.InfoWindow(); 
                }
                else {
                    infoWindow.close();
                }


                if (status == google.maps.GeocoderStatus.OK) { // если геокодирование прошло нормально, то...
                    //текст инфо-окна, которое появится над маркером
                    var text = "<div id=\"InfoWindow\">";
                    var text = text + results[0].formatted_address;
                    var text = text + "<BR>Искать фирмы в этом районе?<BR><input type=\"button\" name=\"YesEvent\" id=\"YesEvent\" value=\"Да\" OnClick=\"searchHere(" + latLng.lat() + "," + latLng.lng() + ")\"/>";
                    var text = text + "<input type=\"button\" name=\"NoEvent\" id=\"NoEvent\" value=\"Нет\"  OnClick=\"infoWindowClose()\"/></div>"; //очищение карты
                    infoWindow.setContent(text);//устанавливаем текс для инфо-окна
                    infoWindow.open(map, marker); //прикрепляем инфо-окно к только что 
                }
            })
                        }
            else{
                clickOnMap = true;
             }
        })
        
        
        
        
        
        
        
        
        

        //var markersArrOn = {};
        markersArrOn = [];

        updateMap(60.9, 30.3, 10);
    
        isLoggedIn = document.getElementById("isLoggedIn").value; //глобальная перменная показывающая залогинен ли пользователь
    
        /**
        *массив, хранящий значение введенных данных о фирме
        */
        firmInfo = {};
        firmInfo.mailbox = '';
        firmInfo.patternOfOwn = '';
        firmInfo.dayReg = '';
        firmInfo.monthReg = '';
        firmInfo.yearReg = '';
        firmInfo.specialization = '';
        firmInfo.name = '';
        firmInfo.postRegistrant = '';
        firmInfo.description = '';
        firmInfo.sphere = '';  
        firmInfo.nameBuilding = '';
        firmInfo.numberFloor = '';
        firmInfo.office = '';
        firmInfo.branch = '';
    
    if (typeof google != 'undefined'){  
        geocoder = new google.maps.Geocoder();
        googleIsLoaded = true;
    }//объект, занимающийся геокодированием
    else{
        alert('Гугля не работает, поэтому страничка с ограниченной функциональностью');     
    }
    
    
} //end JS Onload

function infoWindowClose(){
    clickOnMap = false;
    infoWindow.close();
}


function updateMap(lat, lng, zoom) {
                
        if (typeof markerCluster != 'undefined') {
           markerCluster.clearMarkers();
           
           delete markerCluster;
           
           markersArrOn.length = 0;
        }
        
        var latLng = new google.maps.LatLng(lat, lng);
        
        map.setCenter(latLng);
        map.setZoom(zoom);
    
 
        /*
        *в процессе генерации страницы php скриптом, в ней интегрируется массив с координатами Зданий, которые необходимо отобразить на странице. Массив с названием coord[lat_1: 343, lng_1: 34, lat_2:3434...];
        **/
       

        for (var key in markersArrOff) {

            var z = markersArrOff[key];

            var lat = z['lat'];
            var lng = z['lng'];
            var name = z['name'];
            var id = z['id'];

            var latLng = new google.maps.LatLng(lat, lng);
            
            var marker = new google.maps.Marker({ //добавляем новый маркер с координатами щелчка
                position: latLng,
                map : map,
                icon : W_IMAGES + 'user_mark.png'
            }); 

            
            markersArrOn.push(marker);
            
            /*применям замыкания для назначения каждому обработчику свой маркер*/

            (function(latLng, id, name, marker, windowArr){ 

                google.maps.event.addListener(marker, 'mouseover', function(event){           

                    if ( typeof infoWindow != 'undefined')
                        infoWindow.close();

                            infoWindow = new google.maps.InfoWindow({ 
                                position: latLng, 
                                content: name + '<BR> <a href = "' + W_ABSPATH +'bc/' + id +'">смотреть здание</a>',
                                map: map
                            }); 
                    })
            })(latLng, id, name, marker);
            

            

        }
        
        markerCluster = new MarkerClusterer(map, markersArrOn);

}

function getListFirms() {
    
    var elements= document.getElementsByClassName('podpodRazdel');

    var specialization = [0];
    var i = 0;
    for(var key in elements){
        if (elements[key].checked){
            var x = elements[key].id;
            
            if (typeof x != 'undefined')
                specialization[i] = x.substr(3,x.length);
            
            i++;
        }
    }

        /*
        *получаем данные о городе, стране и адресе из введенных форм на страничке 
        */
        var cityCountry = document.getElementById('city').value; // формат :город(страна). Пр-р: "Москва(Россия)"

        /*
        *парсим город(страна) на отдельные составляющие : город и страна
        **/
        cityName = '';
        countryName = '';
        var myRe = /(^[ 0-9А-Яа-я_-]+)(\(([ 0-9А-Яа-я_-]+)\))?/g;//регулярка для вытаскивания имен города и страны
        if ((myArray = myRe.exec(cityCountry)) != null) {
            cityName = myArray[1];
            cityName = TrimStr(cityName);
            countryName = myArray[3];
            countryName = TrimStr(countryName);
        }

        /*
        *в случае, если пользователем было некорректно введено значение в поле "город", то выводим соответсвующую ошибку и дальше не продолжаем выполнение скрипта
        **/
        if((cityName == "") || (countryName == "")){
            alert('Город введен некорректно');      
        }
    
    var vacancyFree = document.getElementById('vacancyFree').value;
    
    
    
    //*****************************************************************
    
    //геокодирование. координаты вокруг чего мы будем искать
    
    var address = cityName + ' ' + document.getElementById('address').value;
    
    if (document.getElementById('address').value == '') address = '';
    //**********************************
        
        geocoder.geocode({'address': address}, function(results, status) {

            if (status == google.maps.GeocoderStatus.OK) { // если геокодирование прошло нормально, то...

                var latLng = results[0].geometry.location; //получаем объект LatLng, содержащий нужные данные(см. документация google maps api v.3)

                /*
                 *записываем координаты в инфо массив фирмы
                 **/
                var lat = latLng.lat();
                var lng = latLng.lng();
               
            } else {
                
               var lat = 0;
               var lng = 0;
               
            }
            
               var dataSend = {
                    query : 'getListFirm',
                    specialization : specialization,
                    vacancyFree : vacancyFree,
                    city : cityName,
                    lat : lat,
                    lng : lng
                }

            $.post(
                W_AJAX + "controllers/controllerCompany.php",
                {
                    dataSend : dataSend
                },
                function(data){
                    var serverAnswer = data;
                        $('#firmsInsert').innerHTML='';
                        document.getElementById('firmsInsert').innerHTML = serverAnswer.text2;

                        markersArrOff = serverAnswer.coord;

                        updateMap(serverAnswer.lat, serverAnswer.lng, 10);

                    },
                'json'
            ); 
    
            
            
            
        })//конец геокодера
    
    
    //*****************************************************************
    
    

}

/*
 *При невведенном значении города, надпись "введите город" исчезает
 *@return void;
 **/
function inputCityFocus(){
   
   var country = document.getElementById('city').value; 
   
   if (country == 'введите город')
       document.getElementById('city').value = ''; 
}

/*
 *При пустом значении в инпуте  города, это пустое значение меняется на надпись "введите город"
 *@return void;
 **/
function inputCityBlur(){
   
   var country = document.getElementById('city').value; 
   
   if (country == '')
       document.getElementById('city').value = 'введите город';
}

function showFirm(a) {
    
    document.getElementById('vacancyFree').value = a;
    
    getListFirms();
    
}

function showRazdel() {
    

    if (typeof (showRazdel_var) != 'undefined') {
        if (showRazdel_var)
            showRazdel_var = false;
        else 
            showRazdel_var = true;
    } else
        showRazdel_var = true;

    var options = {};
    
    if (showRazdel_var)
        $("#razdel").show( "blind", options, 500, function(){}); 
    else
        $("#razdel").hide( "blind", options, 500, function(){}); 

}

function showFirmBySearch () {
    
        var searchFirm = document.getElementById('searchFirm').value;
 
        var elements = document.getElementsByClassName('podpodRazdel');

        var specialization = [0];
        var i = 0;
        for(var key in elements){
            if (elements[key].checked){
                var x = elements[key].id;

                if (typeof x != 'undefined')
                    specialization[i] = x.substr(3,x.length);

                i++;
            }
        }

            /*
            *получаем данные о городе, стране и адресе из введенных форм на страничке 
            */
            var cityCountry = document.getElementById('city').value; // формат :город(страна). Пр-р: "Москва(Россия)"

            /*
            *парсим город(страна) на отдельные составляющие : город и страна
            **/
            cityName = '';
            countryName = '';
            var myRe = /(^[ 0-9А-Яа-я_-]+)(\(([ 0-9А-Яа-я_-]+)\))?/g;//регулярка для вытаскивания имен города и страны
            if ((myArray = myRe.exec(cityCountry)) != null) {
                cityName = myArray[1];
                cityName = TrimStr(cityName);
                countryName = myArray[3];
                countryName = TrimStr(countryName);
            }

            /*
            *в случае, если пользователем было некорректно введено значение в поле "город", то выводим соответсвующую ошибку и дальше не продолжаем выполнение скрипта
            **/
            if((cityName == "") || (countryName == "")){
                alert('Город введен некорректно');      
            }

        var vacancyFree = document.getElementById('vacancyFree').value;


        var dataSend = {
            query : 'searchFirm',
            searchFirm : searchFirm,
            specialization : specialization,
            vacancyFree : vacancyFree,
            city : cityName
        }

        $.post(
            W_AJAX + "controllers/controllerCompany.php",
            {
                dataSend : dataSend
            },
            function(data){
                var serverAnswer = data;
                    $('#firmsInsert').innerHTML='';
                    document.getElementById('firmsInsert').innerHTML = serverAnswer.text2;
                    
                    markersArrOff = serverAnswer.coord;
                                
                    updateMap(serverAnswer.lat, serverAnswer.lng, 10);
                },
            'json'
        ); 

    
}

function clearAllSpec() {

    var elements = document.getElementsByClassName('podpodRazdel');
    
    for (var key in elements)
        elements[key].checked = 0;

}

function showPodRazdel(numPodRazdel){
    if (typeof arrPodRazdel[numPodRazdel] == 'undefined')
        arrPodRazdel[numPodRazdel] = false;
    
        if (arrPodRazdel[numPodRazdel])
            hidePodRazdel(numPodRazdel);
        else{
            arrPodRazdel[numPodRazdel] = true;
        
            var elem = "podRazdel_" + numPodRazdel;
            var options = {};
            $("#"+elem).show( "blind", options, 500, function(){}); 
        }  
}

function hidePodRazdel(numPodRazdel){
    var elem = "podRazdel_" + numPodRazdel;
    var options = {};
    $("#"+elem).hide( "blind", options, 500, function(){}); 
    arrPodRazdel[numPodRazdel] = false;
}

function hidePodPodRazdel(numPodPodRazdel){
    var elem = "podpodRazdel_" + numPodPodRazdel;
    var options = {};
    $("#"+elem).hide( "blind", options, 500, function(){}); 
    arrPodPodRazdel[numPodPodRazdel] = false;
}

function selectAllSpec() { 

    var elements = document.getElementsByClassName('podpodRazdel');

    for (var key in elements)
        elements[key].checked = 1;
   
}

function searchHere (lat, lng) {
    
    
   var elements= document.getElementsByClassName('podpodRazdel');

    var specialization = [0];
    var i = 0;
    for(var key in elements){
        if (elements[key].checked){
            var x = elements[key].id;
            
            if (typeof x != 'undefined')
                specialization[i] = x.substr(3,x.length);
            
            i++;
        }
    }

    var vacancyFree = document.getElementById('vacancyFree').value;
    
    var dataSend = {
        query : 'searchHere',
        specialization : specialization,
        vacancyFree : vacancyFree,
        lat : lat,
        lng : lng
    }

    $.post(
        W_AJAX + "controllers/controllerCompany.php",
        {
            dataSend : dataSend
        },
        function(data){
            var serverAnswer = data;
                $('#firmsInsert').innerHTML='';
                document.getElementById('firmsInsert').innerHTML = serverAnswer.text2;

                markersArrOff = serverAnswer.coord;

                updateMap(serverAnswer.lat, serverAnswer.lng, 10);
                
                infoWindow.close();
                

            },
        'json'
    ); 
 
}

